package com.board.controller;


import cn.hutool.core.bean.BeanUtil;
import com.board.entity.Notice;
import com.board.entity.ServiceInfo;
import com.board.form.AddNoticeForm;
import com.board.form.AddServiceForm;
import com.board.param.AddNoticeParam;
import com.board.param.AddServiceParam;
import com.board.service.ServiceInfoService;
import com.board.util.JwtUtil;
import com.board.util.PageInfo;
import com.board.util.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 维修工程的服务指南表 前端控制器
 * </p>
 *
 * @author 小叶
 * @since 2024年04月03日
 */
@RestController
@RequestMapping("/serviceInfo")
@Api(tags = "服务指南接口")
public class ServiceInfoController {
    @Autowired
    private ServiceInfoService serviceInfoService;


    /**
     * 新增服务指南信息
     * @param form 新增的标题和内容
     * @param token 管理员token
     * @return 返回新增的服务指南信息
     */
    @PostMapping("/addServiceInfo")
    @ApiOperation("新增服务指南")
    public Result addServiceInfo(@RequestBody AddServiceForm form, @RequestHeader String token){
        Integer adminId = (Integer) JwtUtil.getData(token, "id");
        ServiceInfo notice= serviceInfoService.addServiceInfo(BeanUtil.toBean(form, AddServiceParam.class),adminId);
        return Result.success("新增成功",notice);
    }

    /**
     * 展示服务指南
     * @param serviceInfoId 要展示的id
     * @return 返回展示的服务指南
     */
    @PostMapping("/showService")
    @ApiOperation("展示服务指南")
    public Result showService(Integer serviceInfoId){
        ServiceInfo serviceInfo= serviceInfoService.showService(serviceInfoId);
        return Result.success("展示成功",serviceInfo);
    }

    /**
     * 隐藏服务指南
     * @param serviceInfoId 要隐藏的服务指南id
     * @return 返回隐藏的服务指南数据
     */
    @PostMapping("/downServiceInfo")
    @ApiOperation("隐藏服务指南")
    public Result downServiceInfo(Integer serviceInfoId){
        ServiceInfo serviceInfo= serviceInfoService.downServiceInfo(serviceInfoId);
        return Result.success("隐藏成功",serviceInfo);
    }

    /**
     * 删除服务指南
     * @param serviceInfoId 要删除的服务指南id
     * @return 返回服务指南是否删除成功
     */
    @PostMapping("/deleteServiceInfo")
    @ApiOperation("删除服务指南")
    public Result deleteServiceInfo(Integer serviceInfoId){
        serviceInfoService.deleteServiceInfo(serviceInfoId);
        return Result.success("删除成功",null);
    }

    /**
     * 根据id查询服务指南
     * @param serviceInfoId 要查询的服务指南id
     * @return 返回查询的数据
     */
    @GetMapping("/findServiceById")
    @ApiOperation("根据id查询公告")
    public Result findServiceById(Integer serviceInfoId){
        ServiceInfo pageInfo= serviceInfoService.findServiceById(serviceInfoId);
        return Result.success("查询成功",pageInfo);
    }

    /**
     * 用户查询服务指南
     * @param pageNum 页码
     * @param pageSize 页数
     * @return 返回查询的数据
     */
    @GetMapping("/userFindService")
    @ApiOperation("用户查询服务指南")
    public Result userFindService(Integer pageNum,Integer pageSize){
        PageInfo<ServiceInfo> pageInfo= serviceInfoService.userFindService(pageNum,pageSize);
        return Result.success("查询成功",pageInfo);
    }

    /**
     * 管理员查询服务指南
     * @param serviceTitle 要查询的标题
     * @param pageNum 页码
     * @param pageSize 页数
     * @return 返回查询的信息
     */
    @GetMapping("/adminFindService")
    @ApiOperation("管理员查询服务指南")
    public Result adminFindService(String serviceTitle,Integer pageNum,Integer pageSize){
        PageInfo<ServiceInfo> pageInfo= serviceInfoService.adminFindService(serviceTitle,pageNum,pageSize);
        return Result.success("查询成功",pageInfo);
    }
}

